#include "SDLBase.h"

/**
 * @brief Construct a new SDLBase object
 * 
 */
SDLBase::SDLBase()
{
    baseId = SDL_GetTicks();
    background = nullptr;
    isRealBackground = false;
}


/**
 * @brief Destroy the SDLBase object
 * 
 */
SDLBase::~SDLBase()
{
    if( (background != nullptr) && (isRealBackground == true) )
    {
        SDL_DestroyTexture(background);
    }
}

/**
 * @brief 将动画的相应帧画在画布上
 * 
 * @param renderer ： 2D渲染上下文
 */
void SDLBase::show(SDL_Renderer *renderer)
{
    (void)renderer;
    cout << "SDLBase::show" << endl;
}


/**
 * @brief 得到BaseId
 * 
 * @return int : 返回baseId
 */
int SDLBase::getBaseId()
{
    return baseId;
}


/**
 * @brief cout BaseId
 * 
 */
void SDLBase::showBaseId()
{
    cout << "base ID:" << baseId << endl;
}

/**
 * @brief 处理事件
 * 
 * @param event : 事件参数
 */
void SDLBase::handleEvent(SDL_Event event)
{
    (void)event;
}


/**
 * @brief 加载图片到纹理中
 * 
 * @param renderer ： 2D渲染上下文
 * @param file ： 需要加载的图片
 * @return SDL_Texture* ： 返回的纹理
 */
SDL_Texture* SDLBase::LoadImage(SDL_Renderer *renderer, string file)
{
    SDL_Texture* tex = nullptr;
    tex = IMG_LoadTexture(renderer, file.c_str());
    if (tex == nullptr)
    {
        throw runtime_error("Failed to load image: " + file + IMG_GetError());
    }
    return tex;
}


/**
 * @brief 设置背景
 * 
 * @param renderer ： 2D渲染上下文
 * @param filename ： 需要设置的背景图片
 */
void SDLBase::setBackground(SDL_Renderer *renderer, string filename)
{
    if( (background != nullptr) && (isRealBackground == true) )
    {
        SDL_DestroyTexture(background);
    }
    this->background = LoadImage( renderer, filename);
    isRealBackground = true;
}


/**
 * @brief 设置背景纹理
 * 
 * @param background ： 需要传递的纹理
 */
void SDLBase::setBackground( SDL_Texture *background )
{
    if( (background != nullptr) && (isRealBackground == true) )
    {
        SDL_DestroyTexture(background);
    }
    this->background = background;
    isRealBackground = false;
}
